
// Codes with no args

#define ADD      0x01
#define SUBTRACT 0x02
#define MULTIPLY 0x03
#define DIVIDE   0x04

#define EQ  0x05
#define NE  0x06
#define GT  0x07
#define LT  0x08
#define GTE 0x09
#define LTE 0x0a

#define AND 0x0b
#define OR  0x0c
#define XOR 0x0d
#define NOT 0x0e

#define PRINTSTACK 0x0f

#define PUSHARG0 0x10
#define PUSHARG1 0x11
#define PUSHARG2 0x12
#define PUSHARG3 0x13
#define PUSHARG4 0x14

#define PUSHLOCAL0 0x15
#define PUSHLOCAL1 0x16
#define PUSHLOCAL2 0x17
#define PUSHLOCAL3 0x18
#define PUSHLOCAL4 0x19

#define SETLOCAL0 0x1a
#define SETLOCAL1 0x1b
#define SETLOCAL2 0x1c
#define SETLOCAL3 0x1d
#define SETLOCAL4 0x1e

#define RECV    0x20 
#define SEND    0x21

#define MAKERATIO  0x22

#define PUSHRETVAL 0x2c
#define RETURN     0x2d
#define HALT       0x2e
#define NOP        0x2f

// Codes with a single arg
#define PUSHINT     0x30
#define PUSHINT32   0x31
#define PUSHINT64   0x32

#define PUSHFLOAT   0x33

#define PUSHSTRING  0x35
#define PUSHBIGINT  0x36

#define PUSHARG     0x37
#define PUSHLOCAL   0x38

#define LABEL  0x3a
#define JMP    0x3b
#define JCOND  0x3c

#define STACKALLOC 0x3e
#define DEFUN     0x3f

//More than one arg
#define CALL       0x40
#define CALLBC     0x41
#define CALLCP     0x42
#define TAILCALL   0x43
#define TAILCALLBC 0x44
#define TAILCALLCP 0x45

#define SPAWN   0x46

#define END     0xff

